常见的漏洞挖掘分析技术都是什么
常见的漏洞挖掘分析技术有:
人工分析
人工分析是一种灰盒分析技术。针对被分析目标程序,手工构造特殊输入条件,观察输出、目标状态变化等,获得漏洞的分析技术。输入包括有效的和无效的输入,输出包括正常输出和非正常输出。非正常输出是漏洞出现的前提,或者就是目标程序的漏洞。非正常目标状态的变化也是发现漏洞的预兆,是深入挖掘的方向。人工分析高度依赖于分析人员的经验和技巧。人工分析多用于有人机交互界面的目标程序,Web漏洞挖掘中多使用人工分析的方法。
Fuzzing技术
Fuzzing技术是一种基于缺陷注入的自动软件测试技术,它利用黑盒分析技术方法,使用大量半有效的数据作为应用程序的输入,以程序是否出现异常为标志,来发现应用程序中可能存在的安全漏洞。半有效数据是指被测目标程序的必要标识部分和大部分数据是有效的,有意构造的数据部分是无效的,应用程序在处理该数据时就有可能发生错误,可能导致应用程序的崩溃或者触发相应的安全漏洞。
Fuzzer软件可以用于检测多种安全漏洞,包括缓冲区溢出漏洞、整型溢出漏洞、格式化字符串和特殊字符漏洞、竞争条件和死锁漏洞、SQL注入、跨站脚本、RPC漏洞攻击、文件系统攻击、信息泄露等。与其它技术相比,Fuzzing技术具有思想简单,容易理解、从发现漏洞到漏洞重现容易、不存在误报的优点。
同时它也存在黑盒分析的全部缺点,而且具有不通用、构造测试周期长等问题。常用的Fuzzer软件包括SPIKE Proxy、Peach Fuzzer Framework、Acunetix Web Vulnerability Scanner的HTTP Fuzzer、OWASP JBroFuzz、WebScarab等。
补丁比对技术
补丁比对技术主要用于黑客或竞争对手找出软件发布者已修正但未尚公开的漏洞,是黑客利用漏洞前经常使用的技术手段。
安全公告或补丁发布说明书中一般不指明漏洞的准确位置和原因,黑客很难仅根据该声明利用漏洞。黑客可以通过比较打补丁前后的二进制文件,确定漏洞的位置,再结合其他漏洞挖掘技术,即可了解漏洞的细节,最后可以得到漏洞利用的攻击代码。简单的比较方法有二进制字节和字符串比较、对目标程序逆向工程后的比较两种。
常用的补丁比对工具有Beyond Compare、IDACompare、Binary Diffing Suite(EBDS)、BinDiff、NIPC Binary Differ(NBD)。此外大量的高级文字编辑工具也有相似的功能,如Ultra Edit、HexEdit等。这些补丁比对工具软件基于字符串比较或二进制比较技术。
静态分析技术
静态分析技术是对被分析目标的源程序进行分析检测,发现程序中存在的安全漏洞或隐患,是一种典型的白盒分析技术。它的方法主要包括静态字符串搜索、上下文搜索。
静态分析过程主要是找到不正确的函数调用及返回状态,特别是可能未进行边界检查或边界检查不正确的函数调用,可能造成缓冲区溢出的函数、外部调用函数、共享内存函数以及函数指针等。对开放源代码的程序,通过检测程序中不符合安全规则的文件结构、命名规则、函数、堆栈指针可以发现程序中存在的安全缺陷。
被分析目标没有附带源程序时,就需要对程序进行逆向工程,获取类似于源代码的逆向工程代码,然后再进行搜索。使用与源代码相似的方法,也可以发现程序中的漏洞,这类静态分析方法叫做反汇编扫描。
由于采用了底层的汇编语言进行漏洞分析,在理论上可以发现所有计算机可运行的漏洞,对于不公开源代码的程序来说往往是最有效的发现安全漏洞的办法。但这种方法也存在很大的局限性,不断扩充的特征库或词典将造成检测的结果集大、误报率高;同时此方法重点是分析代码的”特征”,而不关心程序的功能,不会有针对功能及程序结构的分析检查。
动态分析技术
动态分析技术起源于软件调试技术,是用调试器作为动态分析工具,但不同于软件调试技术的是它往往处理的是没有源代码的被分析程序,或是被逆向工程过的被分析程序。动态分析需要在调试器中运行目标程序,通过观察执行过程中程序的运行状态、内存使用状况以及寄存器的值等以发现漏洞。
一般分析过程分为代码流分析和数据流分析。代码流分析主要是通过设置断点动态跟踪目标程序代码流,以检测有缺陷的函数调用及其参数。数据流分析是通过构造特殊数据触发潜在错误。比较特殊的,在动态分析过程中可以采用动态代码替换技术,破坏程序运行流程、替换函数入口、函数参数,相当于构造半有效数据,从而找到隐藏在系统中的缺陷。常见的动态分析工具有SoftIce、OllyDbg、WinDbg等。
典型技术应用
使用Acunetix Web Vulnerability Scanner软件进行漏洞挖掘,该软件提供了一些预定义好的Fuzz运算参数库,可以便于初学者上手,也可以方便分析者使用。过程如下:
定义HTTP请求(Request),即定义所需访问的网页URL;
定义运算参数(Add generator),即定义可能产生漏洞的字符串表达式,如:查找$password、$passwd、$token;
插入运算参数(Insert into request),即将定义好的多条运算参数绑定为一条搜索策略;
定义成功触发特征(Fuzzer Filters),将运算参数与HTTP请求绑定;
扫描(Start);
等待软件返回匹配的项,这些项就是可能的漏洞。
经过以上步骤,一个网页中可能存在的漏洞就被发现了。